package com.yupi.springbootinit.statemachine.core;

import lombok.Data;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 状态上下文
 * 用于在状态转换过程中传递数据
 */
@Data
public class StateContext {
    
    /**
     * 业务实体ID
     */
    private Long entityId;
    
    /**
     * 业务实体类型
     */
    private String entityType;
    
    /**
     * 当前状态
     */
    private State currentState;
    
    /**
     * 目标状态
     */
    private State targetState;
    
    /**
     * 触发事件
     */
    private Event event;
    
    /**
     * 操作用户ID
     */
    private Long operatorId;
    
    /**
     * 操作用户名
     */
    private String operatorName;
    
    /**
     * 扩展参数
     */
    private Map<String, Object> parameters = new ConcurrentHashMap<>();
    
    /**
     * 备注信息
     */
    private String remark;
    
    /**
     * 添加参数
     */
    public void addParameter(String key, Object value) {
        this.parameters.put(key, value);
    }
    
    /**
     * 获取参数
     */
    @SuppressWarnings("unchecked")
    public <T> T getParameter(String key, Class<T> type) {
        Object value = this.parameters.get(key);
        if (value != null && type.isInstance(value)) {
            return (T) value;
        }
        return null;
    }
}